MSM Bus Devices

The bus devices (fabrics/NoCs) are the interconnects between various
components on chipsets. These devices form the backbone of the chip
topology. Entire topology of the chipset is built using the
device-tree data of these bus devices.

To add the bus devices following properties are required:

compatible:		The bus devices need to be compatible with
			msm-bus-fabric
cell-id:		A 32 bit integer unique per bus per chipset. The IDs
			for buses are in multiples of 1024.
label:			Bus name
qcom,fabclk-dual:	Dual set (active/sleep) bus clock name
qcom,fabclk-active:	Active set bus clock name
qcom,nfab:		An integer property which specifies the total number
			of buses on the chipset.

The following properties are optional as a bus might not support
these features:

qcom,ntieredslaves:	Number of tiered slaves on the bus.
qcom,qos-freq:		QoS frequency (In KHz)
qcom,hw-sel:		A string which decides whether QoS data
			should be sent to RPM, set using BIMC or NoCs.
			It can be set to "RPM", "NoC" or "BIMC".
qcom,qos-baseoffset:	Base address offset of QoS registers from the bus device
			base address.
qcom,qos-delta:	 	Address delta between QoS registers of different masters.
qcom,rpm-en:		A boolean flag indicating whether RPM transactions are
			supported for nodes of the bus.
qcom,ahb:		A boolean flag indicating whether the bus is ahb type.
qcom,virt:		A boolean property indicating this is a virtual bus.
reg:			Register space of the bus device. Not required in case
			the bus is virtual.
qom,nr-lim-thresh	The threshold below which to apply throttling of non
			real time masters.
qcom,eff-fact		The DDR effeciency factor to be assumed. This only
			comes into play for buses that connect to the DDR.


The following properties are optional as collecting data via coresight might
not be supported for every bus. The documentation for coresight properties
can be found in:
Documentation/devicetree/bindings/coresight/coresight.txt

coreisght-id		Unique integer identifier for the bus.
coresight-name		Unique descriptive name of the bus.
coresight-nr-inports	Number of input ports on the bus.
coresight-outports	List of output port numbers on the bus.
coresight-child-list	List of phandles pointing to the children of this
			component.
coresight-child-ports	List of input port numbers of the children.


Any interconnect on the bus is represented as a child node.
A child node can be of type: master, slave or a gateway.
A gateway is an interconnect between buses and can be of both
master and slave type.

The following properties are available to characterize a child node.
The properties can be chosen depending on the type of child node.

cell-id:		For a master the ID is between 0 - 512
			For a slave the ID is between 512 - 1024
label:			Name of the master/slave/gateway
qcom,masterp:		Hardware master port number(s)
qcom,tier:		The tier to which a master/slave belongs.
			Note that tiering might not be supported on
			all architectures.
qcom,hw-sel:		A string which decides whether QoS data should be sent
			to RPM, set using BIMC or NoCs.
			It can be set to "RPM", "NoC" or "BIMC".
qcom,mode:		Used for masters on NoC/BIMC. Indicates which of the
			four modes (Fixed/Limiter/Bypass/Regulator) the master
			belongs to.
qcom,perm-mode:		Permissible mode switches. Indicates which of the four
			modes are supported of the master node. Generally,
			modes are set at boot-up and not switched at run-time.
qcom,qport:		QoS port number. This can be different from the
			master-port number.
qcom,ws:		Window size (in Hz), used for NoC/BIMC masters to
			calculate saturation values.
qcom,mas-hw-id:		A unique hardware ID agreed upon by processors across
			the system. This ID is assigned to every master. It can
			be used to send master specific data from
			Apps/Modem/LPASS to RPM.
qcom,slv-hw-id:		A unique hardware ID agreed upon by processors across
			the system. This ID is assigned to every slave. It can
			be used to send slave specific data from
qcom,slaveclk-dual:	Dual set (active/sleep) slave clock name
qcom,slaveclk-active:	Active set slave clock name
			Apps/Modem/LPASS to RPM.
qcom,gateway:		Flag indicating whether a particular node is a gateway.
qcom,slavep:		Hardware slave port number(s).
qcom,buswidth:		Width of the interconnect between a node and the bus.
			(In Bytes).
qcom,prio-rd:		Read priority for a BIMC bus master (Can be 0/1/2)
qcom,prio-wr:		Write priority for a BIMC bus master (Can be 0/1/2)
qcom,prio0:		Priority low signal for a NoC bus master
			(Can be 0/1/2).
qcom,prio1:		Priority high signal for a NoC bus master
			(Can be 0/1/2)
qcom,dual-conf:		Indicates whether a BIMC/NoC master can be configured
			in multiple modes at run-time. (Boolean)
qcom,mode-thresh:	Threshold mode for a BIMC/NoC master. Beyond a certain
			threshold frequency, a threshold mode can be used.
			(Can be Fixed/Limiter/Bypass/Regulator)
qcom,bimc,bw:		Bandwidth limit for a BIMC master using dual modes.
			This bandwidth is used to calculate Grant count and
			other parameters used in Limiter and Regular mode.
			for static BKE configuration. It is defined in KBytes/s.
qcom,bimc,gp:		Grant Period for configuring a master in limiter
			mode. This is an integer value in nano-seconds.
qcom,bimc,thmp:		Medium threshold percentage for BIMC masters.
			This percentage is used to calculate medium threshold
			value for BIMC Masters in Limiter mode for static
			configuration. This can be any integer value between
			1 and 100.
qcom,thresh:		Beyond this threshold frequency, the mode usage is
			switched from mode specified by property qcom,mode
			to the one specified by qcom,mode-thresh. These thresholds
			can be setup in increasing order of thresholds, so the
			requested IB is evaluated at each threshold level before
			making the decision to switch QoS modes and applying the
			corresponding qcom,bimc,bw limitig bw as needed.
			This is specified in KBytes/s.
qcom,rt-mas:		Indicates if a master node is a realtime master with
			hard deadlines.
qcom,nr-lim:		Indicates that this is non-real time master which can
			be throttled in case of concurrent scenarios.
qcom,floor-bw:		Represents the floor bandwidth below which this master
			cannot be throttled. This floor bandwidth is specified in
			KBytes/s.
qcom,ff:		The fudge factor used by clients when voting for
			bandwidth from the node.
qcom,bcm-name:		The name used to fetch details about the bcm device from
			the command DB driver.
qcom,drv-id:		The DRV id associated with the RSC, used to differentiate
			between RSCS owned by different execution environments.
qcom,defer-init-qos:	Flag to force defer initial QoS configuration at probe time.
qcom,sbm-offset:	The offset used to determine location of Sideband
			Manager used in the disconnect mechanism when clients
			remove bandwidth votes.
qcom,disable-ports:	The ports to disable on the sideband manager when the
			requirement bandwidth affecting	the node reduces to 0.
node-reg-names:		Names of the regulator associated with bus node used
			to grab the phandle of the regulator.

Example:


	msm-mmss-noc@fc478000 {
		compatible = "msm-bus-fabric";
		reg = <0xfc478000 0x00004000>;
		cell-id = <2048>;
		label = "msm_mmss_noc";
		qcom,fabclk-dual = "bus_clk";
		qcom,fabclk-active = "bus_a_clk";
		qcom,ntieredslaves = <0>;
		qcom,qos-freq = <4800>;
		qcom,hw-sel = "NoC";
		qcom,rpm-en;
		qcom,nfab = <6>;
		qcom,sbm-offset = <20000>;

		mas-gfx3d {
			cell-id = <26>;
			label = "mas-gfx3d";
			qcom,masterp = <2 3>;
			qcom,tier = <2>;
			qcom,hw-sel = "NoC";
			qcom,perm-mode = "Bypass";
			qcom,mode = "Bypass";
			qcom,ws = <10000>;
			qcom,qport = <2 3>;
			qcom,mas-hw-id = <6>;
			qcom,disable-ports = <1 2>;
		};

		mas-jpeg {
			cell-id = <62>;
			label = "mas-jpeg";
			qcom,masterp = <4>;
			qcom,tier = <2>;
			qcom,hw-sel = "NoC";
			qcom,perm-mode = "Bypass";
			qcom,mode = "Bypass";
			qcom,qport = <0>;
			qcom,ws = <10000>;
			qcom,mas-hw-id = <7>;
		};
	};

	msm-bimc@0xfc380000 {
		compatible = "msm-bus-fabric";
		reg = <0xfc380000 0x0006A000>;
		cell-id = <0>;
		label = "msm_bimc";
		qcom,fabclk-dual = "mem_clk";
		qcom,fabclk-active = "mem_a_clk";
		qcom,ntieredslaves = <0>;
		qcom,qos-freq = <19200>;
		qcom,hw-sel = "BIMC";
		qcom,rpm-en;

		coresight-id = <55>;
		coresight-name = "coresight-bimc";
		coresight-nr-inports = <0>;
		coresight-outports = <0>;
		coresight-child-list = <&funnel_in1>;
		coresight-child-ports = <3>;

		mas-ampss-m0 {
			cell-id = <1>;
			label = "mas-ampss-m0";
			qcom,masterp = <0>;
			qcom,tier = <2>;
			qcom,hw-sel = "BIMC";
			qcom,mode = "Limiter";
			qcom,qport = <0>;
			qcom,ws = <10000>;
			qcom,mas-hw-id = <0>;
			qcom,prio-rd = <0>;
			qcom,prio-wr = <0>;
			qcom,mode-thresh = "Fixed";
			qcom,thresh = <2000000>;
			qcom,dual-conf;
			qcom,bimc,bw = <300000>;
			qcom,bimc,gp = <5>;
			qcom,bimc,thmp = <50>;
		};
	};




The bus scaling driver also provides the ability to configure
bus performance parameters across the entire chip-set.
Various clients use MSM scaling APIs to request bandwidth
between multiple master-slave pairs. The bus driver then finds
the optimal path between the master and the slave, and aggregates
the bandwidth and clock requests for all master-slave pairs on
that path, and programs hardware accordingly.

The device-tree data required for bus-scaling can be embedded within
the clients' device nodes. The clients can register with the bus driver
using the following properties:

- qcom,msm-bus,name:		String representing the client-name
- qcom,msm-bus,num-cases:	Total number of usecases
- qcom,msm-bus,active-only:	Boolean context flag for requests in active or
				dual (active & sleep) contex
- qcom,msm-bus,num-paths:	Total number of master-slave pairs
- qcom,msm-bus,vectors-KBps:	Arrays of unsigned integers representing:
				master-id, slave-id, arbitrated bandwidth
				in KBps, instantaneous bandwidth in KBps

Example:

	qcom,msm-bus,name = "client-name";
	qcom,msm-bus,num-cases = <3>;
	qcom,msm-bus,active-only;
	qcom,msm-bus,num-paths = <2>;
	qcom,msm-bus,vectors =
			<22 512 0 0>, <26 512 0 0>,
			<22 512 320000 3200000>, <26 512 3200000 3200000>,
			<22 512 160000 1600000>, <26 512 1600000 1600000>;

